package main

import (
	"fmt"
)

// 编译
// 在GOPATH下运行命令
// go build hell0world01/08funcbase/func02/model
// go build -o bin\my.exe hell0world01/08funcbase/func02/model
// 测试递归调用~
func main() {
	printBetween(1, 12)

	// 基本类型数据 和 数组 默认都是值传递，在函数内修改，不会影响到原来的值,要影响原来的值，使用指针~
	var num int = 5
	testPtr(&num)
	fmt.Println("num=", num)

	var index int = 10
	fbn := fbn(index)
	fmt.Printf("第 %d 个斐波那契数列的值是=%d", index, fbn)

}

// 基本类型数据 和 数组 默认都是值传递，在函数内修改，不会影响到原来的值,要影响原来的值，使用指针~
func testPtr(num *int) {
	*num = *num * 2
}

// 递归调用~ 打印两个数值之间的所有数，包括两端点
func printBetween(start int, end int) {
	if start <= end {
		fmt.Println("print=", start)
		start++
		printBetween(start, end)
	}
}

// 递归调用~ 获取斐波那契数列,获取第多少个斐波那契数列的具体值
func fbn(index int) int {
	if index == 1 || index == 2 {
		return 1
	} else {
		return fbn(index-1) + fbn(index-2)
	}
}

// 递归调用~ 吃桃子案例
func eatPeach(days int) (res int) {
	if days > 10 || days < 1 {
		return 0
	}
	if days == 10 {
		return 1
	} else {
		return (eatPeach(days+1) + 1) * 2
	}

}
